package zzhyc.keystore

import android.app.Application
import android.util.Log
import com.bytedance.sdk.openadsdk.TTAdConfig
import com.bytedance.sdk.openadsdk.TTAdSdk
import com.bytedance.sdk.openadsdk.TTCustomController
import com.bytedance.sdk.openadsdk.mediation.init.MediationConfig
import com.bytedance.sdk.openadsdk.mediation.init.MediationPrivacyConfig
import org.json.JSONObject
import java.io.IOException

private const val TAG = "MyApp"

class MyApp : Application() {

    override fun onCreate() {
        super.onCreate()
        initSdk()
    }

    private fun initSdk() {
        val flag = TTAdSdk.init(this, buildConfig())
        if (flag) {
            Log.i(TAG, "TTAdSdk.init")
            TTAdSdk.start(object : TTAdSdk.Callback {
                override fun success() {
                    //初始化成功
                    //在初始化成功回调之后进行广告加载
                    Log.i(TAG, "TTAdSdk.start--- success，isReady-- ${TTAdSdk.isSdkReady()}")
                }

                override fun fail(code: Int, msg: String?) {
                    //初始化失败
                    Log.i(TAG, "TTAdSdk.start--- fail")
                }
            })
        }
    }

    // 构造TTAdConfig
    private fun buildConfig(): TTAdConfig {
        val json = readJsonFromAsset("site_config_5587920.json")
        val jsonObject = JSONObject(json)
        return TTAdConfig.Builder()
            .appId(ConstantsKey.CSJ_APP_ID) //APP ID
            .appName(ConstantsKey.AD_APP_NAME) //APP Name
            .useMediation(true)  //开启聚合功能
            .debug(true)  //打开debug开关
            .themeStatus(0)  //正常模式  0是正常模式；1是夜间模式；
            /**
             * 多进程增加注释说明：V>=5.1.6.0支持多进程，如需开启可在初始化时设置.supportMultiProcess(true) ，默认false；
             * 注意：开启多进程开关时需要将ADN的多进程也开启，否则广告展示异常，影响收益。
             * CSJ、gdt无需额外设置，KS、baidu、Sigmob、Mintegral需要在清单文件中配置各家ADN激励全屏xxxActivity属性android:multiprocess="true"
             */
            .supportMultiProcess(false)  //不支持
            .customController(getTTCustomController())  //设置隐私权
            .setMediationConfig(MediationConfig.Builder().setCustomLocalConfig(jsonObject).build())
            .build()
    }

    //设置隐私合规
    private fun getTTCustomController(): TTCustomController {
        return object : TTCustomController() {
            override fun isCanUseLocation(): Boolean {  //是否授权位置权限
                return true
            }

            override fun isCanUsePhoneState(): Boolean {  //是否授权手机信息权限
                return true
            }

            override fun isCanUseWifiState(): Boolean {  //是否授权wifi state权限
                return true
            }

            override fun isCanUseWriteExternal(): Boolean {  //是否授权写外部存储权限
                return true
            }

            override fun isCanUseAndroidId(): Boolean {  //是否授权Android Id权限
                return true
            }

            override fun getMediationPrivacyConfig(): MediationPrivacyConfig? {
                return object : MediationPrivacyConfig() {
                    override fun isLimitPersonalAds(): Boolean {  //是否限制个性化广告
                        return false
                    }

                    override fun isProgrammaticRecommend(): Boolean {  //是否开启程序化广告推荐
                        return true
                    }
                }
            }
        }
    }

    private fun readJsonFromAsset(fileName: String): String {
        return try {
            assets.open(fileName).use { inputStream ->
                inputStream.bufferedReader(Charsets.UTF_8).use { reader ->
                    val jsonContent = reader.readText()
                    jsonContent
                }
            }
        } catch (e: IOException) {
            e.printStackTrace()
            ""
        }
    }
}